﻿using System;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

namespace BCS.SrvActivacion
{
    public enum Acciones { Aceptar = 0, Cancelar = 1 }

    public partial class frmPrincipal : Form
    {
        private string m_DirLog = string.Empty;
        private short m_Accion = -1;
        private bool m_CadenaConexionOK;
        private bool m_ProbarConexion;
        private bool m_ActivarLog;
        private string m_ArchivoLog = "BCS.MotorActivacion-[FECHA].log";

        private const string c_CadenaConexion =
            "Server=[SERVER];UID=[USER];PWD=[PWD];Database=[BD];Trusted_Connection=false;Timeout=500;";

        private string m_CadenaConexion = string.Empty;

        private int m_X;
        private int m_Y;


        public string ArchivoLog
        {
            get { return m_ArchivoLog; }
        }

        public bool ActivarLog
        {
            get { return m_ActivarLog; }
        }

        public short Accion
        {
            get { return m_Accion; }
        }

        public string CadenaConexion
        {
            get { return m_CadenaConexion; }
        }

        public string DirLog
        {
            get { return m_DirLog; }
            set { m_DirLog = value; }
        }

        private void CreaCadenaConexion(string Servidor, string BD, string Usuario, string Clave)
        {
            m_CadenaConexion = c_CadenaConexion;

            m_CadenaConexion = m_CadenaConexion.Replace("[SERVER]", Servidor);
            m_CadenaConexion = m_CadenaConexion.Replace("[BD]", BD);
            m_CadenaConexion = m_CadenaConexion.Replace("[USER]", Usuario);
            m_CadenaConexion = m_CadenaConexion.Replace("[PWD]", Clave);
        }

        private void btnSelDir_Click(object sender, EventArgs e)
        {
            using (var objSelCarpetaLog = new FolderBrowserDialog())
            {
                objSelCarpetaLog.RootFolder = Environment.SpecialFolder.MyComputer;

                if (txtDirLog.Text.Trim().Length > 0)
                    objSelCarpetaLog.SelectedPath = txtDirLog.Text.Trim();

                objSelCarpetaLog.Description = @"Seleccione directorio";
                objSelCarpetaLog.ShowNewFolderButton = true;

                if (objSelCarpetaLog.ShowDialog() == DialogResult.OK)
                    txtDirLog.Text = objSelCarpetaLog.SelectedPath;
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                m_Accion = (short) Acciones.Aceptar;

                if (Directory.Exists(txtDirLog.Text.Trim()))
                {
                    m_DirLog = txtDirLog.Text.Trim();
                    m_ArchivoLog = m_ArchivoLog.Replace("[RUTA]", m_DirLog);

                    if (m_ActivarLog && txtDirLog.Text.Trim().Length < 0)
                        MessageBox.Show(
                            @"Eligió Activar el archivo LOG, pero no especificó ninguna carpeta. Debe especificar carpeta de LOG",
                            @"BanChile Seguros - Servicio de Activación de Seguros",
                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                    if (m_ProbarConexion && !m_CadenaConexionOK)
                        MessageBox.Show(@"Falló la comprobación de la conexión. Desea guardar estos valores?",
                               @"BanChile Seguros - Servicio de Activación de Seguros",
                               MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                }
                else
                    MessageBox.Show(@"El directorio especificado no existe.-",
                           @"BanChile Seguros - Servicio de Activación de Seguros", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            catch (Exception)
            {
                throw;
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show(@"Desea abandonar?", @"BanChile Seguros - Servicio de Activación de Seguros", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
                m_Accion = (short)Acciones.Cancelar;

        }

        private bool ProbarConexion()
        {
            var Retorno = false;

            try
            {
                using (var objConn = new SqlConnection(m_CadenaConexion))
                {
                    objConn.Open();

                    Retorno = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(@"Message: " + ex.Message,
                                @"BanChile Seguros - Servicio de Activación de Seguros", MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
            }

            return Retorno;
        }

        private void btnProbarConexion_Click(object sender, EventArgs e)
        {
            if (txtSQLServer.Text.Trim().Length <= 0 || txtBase.Text.Trim().Length <= 0 ||
                txtUsuario.Text.Trim().Length <= 0 || txtClave.Text.Trim().Length <= 0) return;

            CreaCadenaConexion(txtSQLServer.Text, txtBase.Text, txtUsuario.Text, txtClave.Text);

            m_ProbarConexion = true;
            m_CadenaConexionOK = ProbarConexion();

            if (m_CadenaConexionOK)
                MessageBox.Show(@"Conexión exitosa.-", @"BanChile Seguros - Servicio de Activación de Seguros",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void txtDirLog_LostFocus(object sender, EventArgs e)
        {
            if (txtDirLog.Text.Trim().Length > 0)
                if (!Directory.Exists(txtDirLog.Text.Trim()))
                    MessageBox.Show(@"El directorio especificado no existe.-",
                                    @"BanChile Seguros - Servicio de Activación de Seguros", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
        }

        private void HabilitaProbarConexion(object sender, EventArgs e)
        {
            if ((txtSQLServer.Text.Trim().Length > 0 && txtBase.Text.Trim().Length > 0 &&
                 txtUsuario.Text.Trim().Length > 0 && txtClave.Text.Trim().Length > 0) && !btnProbarConexion.Enabled)
                btnProbarConexion.Enabled = true;
        }

        private void chkActivarLogServicio_CheckedChanged(object sender, EventArgs e)
        {
            m_ActivarLog = chkActivarLogServicio.Checked;

            txtDirLog.Enabled = m_ActivarLog;
            btnSelDir.Enabled = m_ActivarLog;
        }

        private void frmPrincipal_MouseLeave(object sender, EventArgs e)
        {
            if (Cursor.Position.X < Left + 4 || Cursor.Position.Y < Top + 30 ||
                Cursor.Position.X > Left + Width - 5 || Cursor.Position.Y > Top + Height - 31)
                Cursor.Position = new Point(Left + m_X + 4, Top + m_Y + 30);
        }

        private void frmPrincipal_MouseMove(object sender, MouseEventArgs e)
        {
            m_X = e.X;
            m_Y = e.Y;
        }

        public frmPrincipal()
        {
            InitializeComponent();
        }
    }
}
